// 定义用户相关的仓库
import { defineStore } from 'pinia'
// 导入ts类型
import type { LoginData, UserLoginResponseData } from '@/api/hospital/type.ts'
import type { UserState } from './interface/index'
// 导入API方法
import { reqCode, reqUserLogin } from '@/api/hospital/index.ts'
// 导入本地存储信息的方法
import { SET_TOKEN, GET_TOKEN, REMOVE_TOKEN } from '@/utils/user.ts'
const useUserStore = defineStore('User', {
    state: (): UserState => {
        return {
            visiable: false,//控制登录组件的dialog显示隐藏
            code: '',//用户验证码
            // userInfo: (<UserInfo>{})
            // userInfo: JSON.parse(localStorage.getItem('USERINFO') as string) || {}
            userInfo: JSON.parse(GET_TOKEN() as string) || {}
        }
    },
    actions: {
        // 获取验证码
        // 正常开发流程 验证码 发送到手机上  当前项目验证码通过data返回
        async getCode(phone: string) {
            const result: any = await reqCode(phone)
            if (result.code == 200) {
                this.code = result.data;
                return 'ok'
            } else {
                return Promise.reject(new Error(result.message))
            }
        },
        // 用户验证码登录
        async userLogin(loginData: LoginData) {
            const result: UserLoginResponseData = await reqUserLogin(loginData)
            if (result.code === 200) {
                this.userInfo = result.data;
                // 本地存储 持久化存储用户信息
                // localStorage.setItem('USERINFO', JSON.stringify(this.userInfo))
                SET_TOKEN(JSON.stringify(this.userInfo))
                return 'ok';
            } else {
                return Promise.reject(new Error(result.message))
            }
        },
        // 退出登录
        logout() {
            // 清空仓库的数据
            this.userInfo = { name: '', token: '' }
            // 清空本地存储的数据
            REMOVE_TOKEN()
        },
        // 查询微信扫码得接口（看本地存储是否存储数据）
        queryState() {
            // 开启定时器每隔一段时间问 本地存储是否拥有用户信息
            let timer = setInterval(() => {
                // 关闭对话框
                this.visiable = false;
                this.userInfo = JSON.parse(GET_TOKEN() as string)
                clearInterval(timer)
            }, 1000)
        }
    },
    getters: {

    }
})

export default useUserStore